考虑示例应用程序的emp表。emp表的行根据mgr列构成层次结构,该列包含员工经理的员工编号。每个员工最多有一名经理。KING是公司总裁,所以KING没有经理,因此KING的mgr列为null。此外,一个员工也可能担任多个员工的经理。这种关系形成了一个典型的树结构层次组织结构图。
结构图如下图所示。
要基于此关系构成分层查询,SELECT 命令需要包含子句 CONNECT BY PRIOR empno = mgr。例如,假设公司总裁 KING 的员工编号为 7839,则其 mgr 列为 7839 的任何员工都是 KING 的直属下级,这适用于 JONES、BLAKE 和 CLARK(这些是 KING 的子节点)。同样,对于员工 JONES,其 mgr 列等于 7566 的任何其他员工也都是 JONES 的子节点;在此示例中这些员工是 SCOTT 和 FORD。
该组织结构图的顶层是 KING,因而这个树中有一个根节点。START WITH mgr IS NULL 子句仅选择 KING 作为初始根节点。
下面显示了完整的 SELECT 命令。
SELECT ename, empno, mgr
FROM emp
START WITH mgr IS NULL
CONNECT BY PRIOR empno = mgr;
该查询输出中的行按从上到下、从左到右的顺序移动,从根到叶遍历每个分支。下面是此查询的输出。
ename | empno | mgr
--------+-------+------
KING | 7839 |
JONES | 7566 | 7839
SCOTT | 7788 | 7566
ADAMS | 7876 | 7788
FORD | 7902 | 7566
SMITH | 7369 | 7902
BLAKE | 7698 | 7839
ALLEN | 7499 | 7698
WARD | 7521 | 7698
MARTIN | 7654 | 7698
TURNER | 7844 | 7698
JAMES | 7900 | 7698
CLARK | 7782 | 7839
MILLER | 7934 | 7782
(14 rows)